from apps import jsonrpc_v1
from .models import Nav, db, Banner,SiteConfig


@jsonrpc_v1.method("Home.nav")
def nav():
    """导航信息"""
    # 查询所有顶级导航数据[parent_id为空的]，并使用sort和id进行
    top_list = Nav.query.filter(
        Nav.parent_id==None,
        Nav.is_show==True,
        Nav.is_deleted==False
    ).order_by(
        Nav.sort.asc(),
        Nav.id.asc()
    ).limit(5).all()

    data = []
    # 循环每个顶级导航模型，转换成字典
    for top in top_list:
        # 顶级导航有可能存在子导航，所以针对子导航也要循环，
        # 并在顶级导航中增加一个字段保存转换字典后的子导航数据
        top.children_list = []
        for son in top.children:
            top.children_list.append(son.__to_dict__(['name', 'link']))
        data.append( top.__to_dict__(['name', 'link', 'children_list']))

    return data

@jsonrpc_v1.method("Home.banner")
def banner():
    """轮播广告"""
    banner_list = Banner.query.filter(
        Banner.is_show==True,
        Banner.is_deleted==False
    ).order_by(
        Banner.sort.asc(),
        Banner.id.desc()
    ).limit(8).all()

    data = []
    # 循环每个轮播广告模型，转换成字典
    for banner in banner_list:
        item = banner.__to_dict__(["id", "title", "link","image_url"])
        data.append( item )

    return data

@jsonrpc_v1.method("Home.site_config")
def site_config():
    """站点配置"""
    site_config_list = SiteConfig.query.filter(
        SiteConfig.is_show==True,
        SiteConfig.is_deleted==False
    ).order_by(
        SiteConfig.sort.asc(),
        SiteConfig.id.desc(),
    ).limit(8).all()
    # 因为站点配置的每一行记录就是一个键值对，所以我们不需要列表保存查询结果，直接一个字典，然后遍历查询结果提取里面的键值对即可
    data = {}

    for item in site_config_list:
        result = item.__to_dict__(['name', 'value'])
        data[result['name']] = result['value']
    return data
